import http from '@/utils/http'

// 用户个人信息接口类型定义
export interface UserProfileVO {
  avatar?: string
  baseInfo?: string
  birthday?: Date
  email?: string
  height?: number
  name?: string
  nickname?: string
  phone?: string
  sex?: string
  weight?: number
  id?: number
  [property: string]: any
}

// 用户个人信息更新请求类型定义
export interface UserProfileUpdateDTO {
  /** * 1 未知，0 否，1 是。高血压，吸烟，糖尿病.... */
  baseInfo?: string
  /** * 生日：yyyy-MM-dd */
  birthday?: Date
  /** * 邮箱 */
  email?: string
  /** * 身高（cm） */
  height?: number
  /** * 用户唯一标识ID,只传需要修改的信息 */
  id: string
  /** * 真实姓名 */
  name?: string
  /** * 昵称 */
  nickname?: string
  /** * 手机号 */
  phone?: string
  /** * 性别：0-男，1-女 */
  sex?: string
  /** * 体重（kg） */
  weight?: number
  [property: string]: any
}

// 头像上传请求类型定义
export interface AvatarUploadDTO {
  file: File | Blob  // 头像文件，使用FormData格式上传
  [property: string]: any
}

// API响应类型定义
export interface Response {
  data?: UserProfileVO
  error?: ErrorDetail
  status?: number
  [property: string]: any
}

// 错误详情类型定义
export interface ErrorDetail {
  code?: number
  errors?: { [key: string]: string }
  message?: string
  [property: string]: any
}

// 获取用户个人信息
export const getUserProfile = () => {
  return http({
    url: '/user/account/profile',
    method: 'GET'
  })
}

// 更新用户个人信息
export const updateUserProfile = (data: UserProfileUpdateDTO) => {
  return http({
    url: '/user/account/profile',
    method: 'PUT',
    data
  })
}

// 上传用户头像
export const uploadAvatar = (data: AvatarUploadDTO) => {
  // 创建FormData对象
  const formData = new FormData()
  formData.append('file', data.file)

  return http({
    url: '/user/account/avatar',
    method: 'PUT',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}
